package com.ssy.lingxi.pay.api.dto.request;

import lombok.Data;

import javax.validation.constraints.*;
import java.io.Serializable;

/**
 * 微信支付-退款申请
 * @author jw.chen
 * @version 2.0.0
 * @date 2020/10/29
 */
@Data
public class WeChatRefundRequest implements Serializable {
    private static final long serialVersionUID = -8673496273830541860L;
    /**
     * 会员id(收款方)
     */
    @NotNull(message = "会员id要大于0")
    @Positive(message = "会员id要大于0")
    private Long memberId;

    /**
     * 会员角色id(收款方)
     */
    @NotNull(message = "角色id要大于0")
    @Positive(message = "角色id要大于0")
    private Long memberRoleId;

    /**
     * 微信订单号
     */
    @Size(max = 32, message = "微信订单号最长32个字符")
    private String transactionId;

    /**
     * 商户订单号
     */
    @NotBlank(message = "商户订单号不能为空")
    @Size(max = 32, message = "商户订单号最长32个字符")
    private String outTradeNo;

    /**
     * 订单金额
     */
    @NotNull(message = "金额要大于等于0")
    @PositiveOrZero(message = "金额要大于等于0")
    private Double payMoney;

    /**
     * 商户退款单号(只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔)
     */
    @NotBlank(message = "商户退款单号不能为空")
    @Size(max = 64, message = "商户退款单号最长64个字符")
    private String outRefundNo;

    /**
     * 退款金额
     */
    @NotNull(message = "退款金额要大于等于0")
    @PositiveOrZero(message = "退款金额要大于等于0")
    private Double refundMoney;

    /**
     * 支付类型: 1-平台; 2-会员; (非必填，空值会根据资金归集模式)
     */
    private Integer payType;

    /**
     * 微信商户号，可为空，如四个参数有任一个为空，会从订单服务支付参数配置中查询
     */
    private String merchantId;

    /**
     * 微信AppId，可为空，如四个参数有任一个为空，会从订单服务支付参数配置中查询
     */
    private String appId;

    /**
     * 微信ApiKey，可为空，如四个参数有任一个为空，会从订单服务支付参数配置中查询
     */
    private String apiKey;

    /**
     * 微信退款证书路径，可为空，如四个参数有任一个为空，会从订单服务支付参数配置中查询
     */
    private String keyPath;
}
